//
//  HMStatusPictureView.swift
//  HMWeibo12
//
//  Created by iOS on 16/9/22.
//  Copyright © 2016年 iOS. All rights reserved.
//

import UIKit

/// 图片之间的间距
let HMStatusPictureViewItemMargin: CGFloat = 4

/// 图片的宽高
let HMStatusPictureViewItemWH: CGFloat = (UIScreen.width - 2 * HMStatusCellMargin - 2 * HMStatusPictureViewItemMargin) / 3

/// 微博配图
class HMStatusPictureView: UIView {
    
    private lazy var debugLabel: UILabel = {
        let label = UILabel()
        
        // 设置
        label.textColor = UIColor.blue
        label.font = UIFont.systemFont(ofSize: 20)
        label.frame = CGRect(x: 0, y: 0, width: 300, height: 60)
        label.isHidden = true
        
        return label
    }()
    
    /// 需要显示的图片的url数组
    var imageURLs: [URL]? {
        didSet {
            // 知道配图要显示几张图片
            let count = imageURLs?.count ?? 0
//            let count: Int = Int(arc4random_uniform(10))
            
            debugLabel.text = "\(count)"
            
            // 布局图片
            layoutImages(count: count)
            
            // 计算大小
            let size = calcSize(count: count)
            widthCons.constant = size.width
            heightCons.constant = size.height
        }
    }
    
    // ?: 表示是一个可选
    // !: 表示是一个可选,隐式拆包,不用我们处理,当我们使用的时候他自动帮我们拆包, 注意,一定要保证在使用的时候有值.如果没有值程序挂了
    @IBOutlet var widthCons: NSLayoutConstraint!
    
    @IBOutlet var heightCons: NSLayoutConstraint!
    
    /// 9张图片的数组
    var imageViews: [UIImageView] = [UIImageView]()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    // sb 和XIB 走这里
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        // 创建9张图片
        createImages()
        self.addSubview(debugLabel)
    }
    
    private func createImages() {
        for _ in 0..<9 {
            // 创建图片
            let imageView = UIImageView()
            
//            image.backgroundColor = UIColor.brown
//            image.backgroundColor = UIColor.random
            // 设置填充模型
            imageView.contentMode = UIViewContentMode.scaleAspectFill
            imageView.clipsToBounds = true
            
            // gif提示图片, timeline_image_gif
            let gifView = UIImageView(image: UIImage(named: "timeline_image_gif"))
            imageView.addSubview(gifView)
            // 将gifView放在imageView的右下角
            gifView.translatesAutoresizingMaskIntoConstraints = false
            
            // trailing
            imageView.addConstraint(NSLayoutConstraint(item: gifView, attribute: .trailing, relatedBy: .equal, toItem: imageView, attribute: .trailing, multiplier: 1, constant: 0))
            // bottom
            imageView.addConstraint(NSLayoutConstraint(item: gifView, attribute: .bottom, relatedBy: .equal, toItem: imageView, attribute: .bottom, multiplier: 1, constant: 0))
            
            self.addSubview(imageView)
            imageViews.append(imageView)
        }
        
//        layoutImages()
    }
    
    
    /// 布局图片的位置
    ///
    /// - parameter count: 需要布局图片的数量
    private func layoutImages(count: Int) {
        // 列数
        var numberOfColumn = 3
        
        if count == 1 {
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            numberOfColumn = 2
        }
        
        // 遍历9张图片
        for (index, imageView) in imageViews.enumerated() {
            
            if index >= count {
                // 隐藏
                imageView.isHidden = true
            } else {
                // 需要显示的,显示,计算frame
                imageView.isHidden = false
                
                // 计算在哪一列
                let coulumn = index % numberOfColumn
                
                // 计算在哪行
                let row = index / numberOfColumn
                
                let x = CGFloat(coulumn) * (HMStatusPictureViewItemWH + HMStatusPictureViewItemMargin)
                // y值从8开始
                let y = HMStatusCellMargin + CGFloat(row) * (HMStatusPictureViewItemWH + HMStatusPictureViewItemMargin)
                
                let frame = CGRect(x: x, y: y, width: HMStatusPictureViewItemWH, height: HMStatusPictureViewItemWH)
                
                imageView.frame = frame
                
                // 设置图片的内容
                if let url = imageURLs?[index] {
                    imageView.sd_setImage(with: url)
                    // 判断是否是gif图片
                    let isGif = url.absoluteString.lowercased().hasSuffix("gif")
                    imageView.subviews.first?.isHidden = !isGif
                }
            }
        }
    }
    
    
    /// 计算配图大小
    ///
    /// - parameter count: 配图的数量
    ///
    /// - returns: 配图大小
    private func calcSize(count: Int) -> CGSize {
        if count == 0 {
            return CGSize()
        }
        
        // 列数
        var numberOfColumn = 3
        
        if count == 1 {
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            numberOfColumn = 2
        }
        
        // 计算行数? 已知总个数,已知列数,计算行数公式
        // 行数 = (总个数 + 列数 - 1) / 列数, 一定要记住,必须都是整数
        // 2 = (4 + 2 - 1) / 2
        // 2 = (6 + 3 - 1) / 3
        // 3 = (7 + 3 - 1) / 3
        let numberOfRow = (count + numberOfColumn - 1) / numberOfColumn
        
        // 计算总宽 = 列数 * 图片的宽度 + (列数 - 1) * 间距
        let width = CGFloat(numberOfColumn) * HMStatusPictureViewItemWH + (CGFloat(numberOfColumn) - 1) * HMStatusPictureViewItemMargin
        
        // 计算高度 = 行数 * 图片的高度 + (行数 - 1) * 间距
        // 内容从y = 8开始的
        let height = HMStatusCellMargin + CGFloat(numberOfRow) * HMStatusPictureViewItemWH + (CGFloat(numberOfRow) - 1) * HMStatusPictureViewItemMargin
        
        return CGSize(width: width, height: height)
    }
}
